home *** CD-ROM | disk | FTP | other *** search
- property ancestor, p_player_type, p_char_num, p_player_num, p_health, p_max_health, p_power, p_max_power, p_used_projectiles, p_quadrant, p_move, p_aim, p_attack, p_effectiveness_index, p_defend, p_previous_quadrant, p_attack_done, p_dead, p_die_counter
- global g_game
-
- on new me, t_char_num, t_player_type, t_player_num
- if t_player_type = #human then
- ancestor = script("human_player_object").new()
- else
- ancestor = script("computer_player_object").new()
- end if
- p_player_type = t_player_type
- p_char_num = t_char_num
- p_player_num = t_player_num
- p_dead = 0
- return me
- end
-
- on init_player me
- p_max_health = 100
- p_health = p_max_health
- p_max_power = 100
- p_power = p_max_power / 2
- p_defend = 0
- if p_player_num = 1 then
- p_quadrant = #bottom_left
- else
- p_quadrant = #bottom_right
- end if
- me.reset_strategy()
- end
-
- on reset_strategy me
- p_used_projectiles = []
- p_move = VOID
- p_aim = VOID
- p_attack = VOID
- p_effectiveness_index = VOID
- p_attack_done = VOID
- if p_defend > 0 then
- p_defend = p_defend - 1
- end if
- end
-
- on get_player_type me
- return p_player_type
- end
-
- on get_quadrant me
- return p_quadrant
- end
-
- on get_char_num me
- return p_char_num
- end
-
- on get_move me
- return p_move
- end
-
- on set_move me, t_move
- p_move = t_move
- if p_player_type = #human then
- call(#hide, me.get_move_sprites())
- end if
- end
-
- on do_move me, quadrant
- p_previous_quadrant = p_quadrant
- if symbolp(quadrant) then
- p_quadrant = quadrant
- else
- p_quadrant = p_move
- end if
- end
-
- on move_to_previous_position me
- me.do_move(p_previous_quadrant)
- end
-
- on show_attack me
- if p_player_type = #human then
- call(#show, me.get_attack_sprites())
- end if
- end
-
- on set_attack me, attack
- if p_player_type = #human then
- if attack = 8 then
- attack = attack + p_char_num - 1
- end if
- end if
- if listp(me.get_attack_list().getaProp(attack)) then
- p_attack = me.get_attack_list().getaProp(attack)
- case p_attack.type of
- 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15:
- p_aim = #none
- end case
- if p_player_type = #human then
- call(#hide, me.get_attack_sprites())
- end if
- end if
- end
-
- on get_attack me
- return p_attack
- end
-
- on show_aim me
- case p_attack.type of
- 2, 3, 4:
- if p_player_type = #human then
- call(#show, me.get_aim_sprites())
- end if
- end case
- end
-
- on set_aim me, aim
- if p_move <> aim then
- p_aim = aim
- if p_player_type = #human then
- call(#hide, me.get_aim_sprites())
- end if
- end if
- end
-
- on get_aim me
- return p_aim
- end
-
- on show_effectiveness me
- call(#show, me.get_effectiveness_sprites())
- end
-
- on hide_effectiveness me
- call(#hide, me.get_effectiveness_sprites())
- end
-
- on defend me
- p_defend = 2
- end
-
- on hit me
- p_defend = 0
- end
-
- on update_power_bar me
- me.update_power(-p_attack.cost)
- end
-
- on update_health me, health
- p_health = max(min(p_health + health, 100), 0)
- me.get_health_bar_sprite().update(float(p_health) / p_max_health)
- if health < 0 then
- me.update_power(-10)
- end if
- if p_health = 0 then
- me.die()
- end if
- end
-
- on update_power me, power
- p_power = max(min(p_power + power, 100), 0)
- me.get_power_bar_sprite().update(float(p_power) / p_max_power)
- end
-
- on attack_available me, attack
- if attack = 8 then
- attack = attack + me.get_char_num() - 1
- end if
- if listp(me.get_attack_list().getaProp(attack)) then
- return 1
- else
- return 0
- end if
- end
-
- on aim_available me, aim
- if p_move = aim then
- return 0
- else
- return 1
- end if
- end
-
- on shield_active me, player_num
- if p_defend > 0 then
- return 1
- else
- return 0
- end if
- end
-
- on move_necessary me, player_num
- if p_move <> p_quadrant then
- return 1
- else
- return 0
- end if
- end
-
- on get_move_type me, quadrant, move
- case quadrant of
- #top_left:
- case move of
- #top_right, #bottom_right:
- return 1
- #bottom_left:
- return 2
- end case
- #top_right:
- case move of
- #top_left, #bottom_left:
- return 1
- #bottom_right:
- return 2
- end case
- #bottom_left:
- case move of
- #top_left:
- return 3
- #top_right, #bottom_right:
- return 1
- end case
- #bottom_right:
- case move of
- #top_left, #bottom_left:
- return 1
- #top_right:
- return 3
- end case
- end case
- end
-
- on get_fire_direction me
- case p_quadrant of
- #top_left:
- case p_aim of
- #top_right:
- return 1
- #bottom_right:
- return 3
- #bottom_left:
- return 5
- end case
- #top_right:
- case p_aim of
- #top_left:
- return 1
- #bottom_left:
- return 3
- #bottom_right:
- return 5
- end case
- #bottom_left:
- case p_aim of
- #top_left:
- return 4
- #top_right:
- return 2
- #bottom_right:
- return 1
- end case
- #bottom_right:
- case p_aim of
- #top_left:
- return 2
- #bottom_left:
- return 1
- #top_right:
- return 4
- end case
- end case
- end
-
- on random_move me, quadrant
- move_list = [#top_right, #top_left, #bottom_right, #bottom_left]
- move_list.deleteOne(p_quadrant)
- move_list.deleteOne(quadrant)
- p_quadrant = move_list[random(move_list.count())]
- end
-
- on get_special_move_direction me
- case p_quadrant of
- #top_right, #top_left:
- return 3
- #bottom_right, #bottom_left:
- return 2
- end case
- end
-
- on remove_shield me
- p_defend = 0
- end
-
- on set_attack_done me
- p_attack_done = 1
- end
-
- on get_attack_done me
- return p_attack_done
- end
-
- on get_shield me
- return p_defend
- end
-
- on die me
- timeout("dead_timer" & string(p_player_num)).new(35, #do_explosion, me)
- p_attack_done = 1
- end
-
- on do_explosion me
- player_sprite = me.get_player_sprite()
- projectile_sprite = me.use_projectile_sprite()
- if objectp(projectile_sprite) then
- if count(projectile_sprite.scriptInstanceList) > 0 then
- projectile_sprite.show(player_sprite.loc, "hit_", 9, [#type: 2, #cost: 5, #damage: [0, 2, 4]], 10)
- end if
- end if
- p_die_counter = p_die_counter + 1
- if p_die_counter = 8 then
- timeout("dead_timer" & string(p_player_num)).forget()
- p_dead = 1
- call(#destroy_projectile, p_used_projectiles)
- me.set_attack_done()
- player_sprite.set_ancestor(script("die_object").new(player_sprite, p_player_num))
- end if
- end
-
- on tell_used_projectile_sprite me, proj_sprite
- p_used_projectiles.add(proj_sprite)
- end
-
- on is_human me
- if p_player_type = #human then
- return 1
- end if
- return 0
- end
-